﻿#ifndef _MAIN_TOP_PACK_TRANSFORM_H_
#define _MAIN_TOP_PACK_TRANSFORM_H_

#include <mtAffine.h>
#include <stddef.h>

#ifdef _WIN32
#ifdef __GNUC__
#define MtPackTransformCallType __attribute__((stdcall))
#else
#define MtPackTransformCallType __stdcall
#endif
#else
#define MtPackTransformCallType
#endif

#ifdef __cplusplus
extern "C" {
#endif

// 排版后的图像位置
typedef struct _MtPackTransformImage {
  double                width, height;  // 图像长宽, 单位mm
  double                xdpi, ydpi;     // 分辨率
  MtAffineFPoint        loc;            // 坐上顶点位置
  double                rot;            // 旋转角度, 逆时针位正, 支持0, 90, 180, 270
  bool                  isRotate;
  double                scale;          // 缩放比例
} MtPackTransformImage;

typedef struct _MtPackTransformPager {
  double                width, height;  // 纸张大小
  double                xdpi, ydpi;     // 各个图像需要统一到的分辨率
} MtPackTransformPager;

typedef struct _MtPackTransformParam {
  MtPackTransformImage  *images;
  size_t                imageCount;
  MtPackTransformPager  paper;
} MtPackTransformParam;


typedef struct _MtPackTransformView {
  double        left, top, right, bottom;
  double        xdpi, ydpi;
} MtPackTransformView;

typedef struct _MtPackTransformRet {
  MtAffineMatrix        *matrix;
  size_t                matCount;
  MtPackTransformView   view;
} MtPackTransformRet;


MtPackTransformRet *MtPackTransformCallType
MtPackTransform(const MtPackTransformParam *param);

void MtPackTransformCallType
MtPackTransformRelease(MtPackTransformRet *transform);

#ifdef __cplusplus
}
#endif

#endif
